/*
 * Copyright 2012 LIG SIGMA
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package fr.lig.sigma.astral.common.structure;

import fr.lig.sigma.astral.common.Batch;

/**
 * Basic relation concept that will be shared among the framework.
 * It specifies the relation R defined in AStrAL
 * @author Loic Petit
 */
public interface DynamicRelation extends Relation {
    /**
     * Get the inserted tuples at the given batch
     * @param b the batch
     * @return Returns R(b)\R(b^-)
     */
    TupleSet getInsertedTuples(Batch b);

    /**
     * Get the deleted tuples at the given batch
     * @param b the batch
     * @return Returns R(b^-)\R(b)
     */
    TupleSet getDeletedTuples(Batch b);

    /**
     * Updates the state of a relation with the differences
     * @param b the batch
     * @param insertedTuples Tuples that are new in R(b)
     * @param deletedTuples Tuples that have been deleted in R(b)
     */
    void update(Batch b, TupleSet insertedTuples, TupleSet deletedTuples);
}
